<template>
  <div>
    实现深拷贝: <br />
    区分深拷贝浅拷贝： <br />
    深拷贝(基本类型)：名值存储在栈内存中，当你b=a复制时，栈内存会新开辟一个内存
    <br />
    浅拷贝(引用类型)：名存在栈内存中，值存在于堆内存中，但是栈内存会提供一个引用的地址指向堆内存中的值
    <br />
    方法: <br />
    concat 拼接 <br />
    对象类型 JSON.parse（）和 JSON.stringify（）层级遍历 <br />
    <br />

    手写深拷贝： 关键点 hasOwnProperty用来判断是否存在某属性<br />
  </div>
</template>

<script>
export default {
  created() {
    // console.log(11);
    let leilei = {
      a: 1,
      b: 2,
      c: 3,
      d: 4,
      e: 5,
    };
    let leilei2 = this.deepClone(leilei);
    console.log(leilei);
    console.log(leilei2);
    leilei2.b = 333;
    console.log(leilei);
    console.log(leilei2);

    // let leilei3 = [1,2,3]
    // let leilei4 = this.deepClone(leilei3);
    // console.log(leilei3);
    // console.log(leilei4);
  },
  methods: {
    deepClone(obj) {
      let objClone = Array.isArray(obj) ? [] : {};
      if (obj && typeof obj == "object") {
        for (let key in obj) {
          if (obj.hasOwnProperty(key)) {
            if (obj[key] && typeof obj[key] == "object") {
              objClone[key] = deepClone(obj[key]);
            } else {
              //如果不是，直接赋值
              objClone[key] = obj[key];
            }
          }
        }
      }
      return objClone;
    },

    
  },
};
</script>

<style>
</style>